shortcutcontroller: Add a way to update accels
authorMatthias Clasen <mclasen@redhat.com>
Thu, 17 Jun 2021 12:31:13 +0000 (08:31 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 17 Jun 2021 12:50:26 +0000 (08:50 -0400)
This will be used to make accel changes propagate.

gtk/gtkshortcutcontroller.c
gtk/gtkshortcutcontrollerprivate.h

index 75d4829fe02d200915ba490092fd4a33dd843108..01bc60208cdbfe2e512feaa801a660ea544a518d 100644 (file)
@@ -480,16 +480,17 @@ update_accel (GtkShortcut    *shortcut,
   g_free (accel);
 }
 
-static void
-gtk_shortcut_controller_set_widget (GtkEventController *controller,
-                                    GtkWidget          *widget)
+void
+gtk_shortcut_controller_update_accels (GtkShortcutController *self)
 {
-  GtkShortcutController *self = GTK_SHORTCUT_CONTROLLER (controller);
   GListModel *shortcuts = self->shortcuts;
+  GtkWidget *widget;
   GtkActionMuxer *muxer;
   guint i, p;
 
-  GTK_EVENT_CONTROLLER_CLASS (gtk_shortcut_controller_parent_class)->set_widget (controller, widget);
+  widget = gtk_event_controller_get_widget (GTK_EVENT_CONTROLLER (self));
+  if (!widget)
+    return;
 
   muxer = _gtk_widget_get_action_muxer (widget, TRUE);
   for (i = 0, p = g_list_model_get_n_items (shortcuts); i < p; i++)
@@ -499,6 +500,17 @@ gtk_shortcut_controller_set_widget (GtkEventController *controller,
         update_accel (shortcut, muxer, TRUE);
       g_object_unref (shortcut);
     }
+}
+
+static void
+gtk_shortcut_controller_set_widget (GtkEventController *controller,
+                                    GtkWidget          *widget)
+{
+  GtkShortcutController *self = GTK_SHORTCUT_CONTROLLER (controller);
+
+  GTK_EVENT_CONTROLLER_CLASS (gtk_shortcut_controller_parent_class)->set_widget (controller, widget);
+
+  gtk_shortcut_controller_update_accels (self);
 
   if (_gtk_widget_get_root (widget))
     gtk_shortcut_controller_root (self);
index db1b52cecc8ed8aa1eaea008652c0cac73bde2f6..af622910d7ae552de62d85c2a0eda549219a48e4 100644 (file)
@@ -25,4 +25,6 @@
 void                    gtk_shortcut_controller_root                    (GtkShortcutController  *controller);
 void                    gtk_shortcut_controller_unroot                  (GtkShortcutController  *controller);
 
+void                    gtk_shortcut_controller_update_accels           (GtkShortcutController  *self);
+
 #endif /* __GTK_SHORTCUT_CONTROLLER_H__ */